package com.wzs.easytobuy.service;

import com.wzs.easytobuy.model.Address;
import com.wzs.easytobuy.model.Order;
import com.wzs.easytobuy.model.ShoppingCar;
import com.wzs.easytobuy.vo.PaginationVO;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author miaomiao
 * @version 1.0.0
 * @Description 处理购物车相关业务的接口类
 * @createTime 2021-06-29- 10:50:00
 */
public interface ICarService {

    /**
     * 根据当前用户的id来查询该用户添加在购物车中的所有商品
     *
     * @param userId 用户id
     * @return 返回一个购物车对象
     */
    List<ShoppingCar> selectByUid(String userId);

    /**
     * 添加默认规格的商品到购物车中
     *
     * @param productId 商品id
     * @param userId    用户id
     * @param price     商品价格
     * @param imageUrl  商品图片地址
     * @param sales     商品销量
     * @param number    商品数量
     * @return 返回一个true/false
     */
    boolean addProduct(String productId, String userId, String price, String imageUrl, String sales, int number);

    /**
     * 根据用户选择的规格将商品添加到购物车中
     *
     * @param productId 商品的id
     * @param userId    用户的id
     * @param price     商品的价格
     * @param imageUrl  商品图片的路径
     * @param number1   商品数量
     * @param colorId   用户所选商品颜色id
     * @param sizeId    用户所选型号id
     * @return 返回一个true/false
     */
    boolean addProduct2(String productId, String userId, String price, String imageUrl, int number1, String colorId, String sizeId);

    /**
     * 分页查询结合条件查询显示购物车信息列表
     *
     * @param map 封装有分页数据,掠过的记录数,每页大小,商品名
     * @return PaginationVO
     */
    PaginationVO<Map<String, Object>> pageList(HashMap<String, Object> map);

    /**
     * 删除购物车中的商品
     *
     * @param id 该商品在购物车中的id
     * @return 返回一个true/false
     */
    boolean deleteById(String id);

    /**
     * 确认订单页中显示需要结算的商品信息
     *
     * @param ids 需要结算商品的id值
     * @return 返回结算商品的所需信息, 封装在map中
     */
    List<Map<String, Object>> carList(List<String> ids);

    /**
     * 根据用户id查询该用户的地址信息
     *
     * @param userId 用户id
     * @param flag   填充默认地址
     * @return 返回一个地址对象
     */
    Address selectAddressByUid(String userId, int flag);

    /**
     * 保存用户的地址
     *
     * @param address 通过address对象来接收参数
     * @return 返回一个true/false
     */
    Map<String, Object> saveAddress(Address address);

    /**
     * 确认订单
     *
     *
     * @param method
     * @param psMethod  快递方式
     * @param userId    用户id
     * @param addressId 地址id
     * @param sid       商品的id
     * @return 返回一个订单对象
     */
    Order deal(String method, String psMethod, String userId, String addressId, String sid);


}
